text:
package org.jivesoftware.smack.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

/**
 * A collection of utility methods for String objects.
 */
public class StringUtils {

    private static final char[] QUOTE_ENCODE = """.toCharArray();
    private static final char[] APOS_ENCODE = "'".toCharArray();
    private static final char[] AMP_ENCODE = "&".toCharArray();
    private static final char[] LT_ENCODE = "<".toCharArray();
    private static final char[] GT_ENCODE = ">".toCharArray();

    /**
     * Returns the name portion of a XMPP address. For example, for the
     * address "matt@jivesoftware.com/Smack", "matt" would be returned. If no
     * username is present in the address, the empty string will be returned.
     *
     * @param XMPPAddress the XMPP address.
     * @return the name portion of the XMPP address.
     */
    public static String parseName(String XMPPAddress) {
        if (XMPPAddress == null) {
            return null;
        }
        int atIndex = XMPPAddress.lastIndexOf("@");
        if (atIndex <= 0) {
            return "";
        }
        else {
            return XMPPAddress.substring(0, atIndex);
        }
    }

    /**
     * Returns the server portion of a XMPP address. For example, for the
     * address "matt@jivesoftware.com/Smack", "jivesoftware.com" would be returned.
     * If no server is present in the address, the empty string will be returned.
     *
     * @param XMPPAddress the XMPP address.
     * @return the server portion of the XMPP address.
     */
    public static String parseServer(String XMPPAddress) {
        if (XMPPAddress == null) {
            return null;
        }
        int atIndex = XMPPAddress.lastIndexOf("@");
        // If the String ends with '@', return the empty string.
        if (atIndex + 1 > XMPPAddress.length()) {
            return "";
        }
        int slashIndex = XMPPAddress.indexOf("/");
        if (slashIndex > 0 && slashIndex > atIndex) {
            return XMPPAddress.substring(atIndex + 1, slashIndex);
        }
        else {
            return XMPPAddress.substring(atIndex + 1);
        }
    }

    /**
     * Returns the resource portion of a XMPP address. For example, for the
     * address "matt@jivesoftware.com/Smack", "Smack" would be returned. If no
     * resource is present in the address, the empty string will be returned.
     *
     * @param XMPPAddress the XMPP address.
     * @return the resource portion of the XMPP address.
     */
    public static String parseResource(String XMPPAddress) {
        if (XMPPAddress == null) {
            return null;
        }
        int slashIndex = XMPPAddress.indexOf("/");
        if (slashIndex + 1 > XMPPAddress.length() || slashIndex < 0) {
            return "";
        }
        else {
            return XMPPAddress.substring(slashIndex + 1);
        }
    }

    /**
     * Returns the XMPP address with any resource information removed. For example,
     * for the address "matt@jivesoftware.com/Smack", "matt@jivesoftware.com" would
     * be returned.
     *
     * @param XMPPAddress the XMPP address.
     * @return the bare XMPP address without resource information.
     */
    public static String parseBareAddress(String XMPPAddress) {
        if (XMPPAddress == null) {
            return null;
        }
        int slashIndex = XMPPAddress.indexOf("/");
        if (slashIndex < 0) {
            return XMPPAddress;
        }
        else if (slashIndex == 0) {
            return "";
        }
        else {
            return XMPPAddress.substring(0, slashIndex);
        }
    }

    /**
     * Escapes the node portion of a JID according to "JID Escaping" (JEP-0106).
     * Escaping replaces characters prohibited by node-prep with escape sequences,
     * as follows:

     *
     *

     *
Unescaped Character	Encoded Sequence

     *
<space>	\20

     *
"	\22

     *
&	\26

     *
'	\27

     *
/	\2f

     *
:	\3a

     *
<	\3c

     *
>	\3e

     *
@	\40

     *
\	\5c

     *

     *
     * This process is useful when the node comes from an external source that doesn't
     * conform to nodeprep. For example, a username in LDAP may be "Joe Smith". Because
     * the <space> character isn't a valid part of a node, the username should
     * be escaped to "Joe\20Smith" before being made into a JID (e.g. "joe\20smith@example.com"
     * after case-folding, etc. has been applied).

     *
     * All node escaping and un-escaping must be performed manually at the appropriate
     * time; the JID class will not escape or un-escape automatically.
     *
     * @param node the node.
     * @return the escaped version of the node.
     */
    public static String escapeNode(String node) {
        if (node == null) {
            return null;
        }
        StringBuilder buf = new StringBuilder(node.length() + 8);
        for (int i=0, n=node.length(); i<n; i++) {
            char c = node.charAt(i);
            switch (c) {
                case '"': buf.append("\\22"); break;
                case '&': buf.append("\\26"); break;
                case '\'': buf.append("\\27"); break;
                case '/': buf.append("\\2f"); break;
                case ':': buf.append("\\3a"); break;
                case '<': buf.append("\\3c"); break;
                case '>': buf.append("\\3e"); break;
                case '@': buf.append("\\40"); break;
                case '\\': buf.append("\\5c"); break;
                default: {
                    if (Character.isWhitespace(c)) {
                        buf.append("\\20");
                    }
                    else {
                        buf.append(c);
                    }
                }
            }
        }
        return buf.toString();
    }

    /**
     * Un-escapes the node portion of a JID according to "JID Escaping" (JEP-0106).

     * Escaping replaces characters prohibited by node-prep with escape sequences,
     * as follows:

     *
     *

     *
Unescaped Character	Encoded Sequence

     *
<space>	\20

     *
"	\22

     *
&	\26

     *
'	\27

     *
/	\2f

     *
:	\3a

     *
<	\3c

     *
>	\3e

     *
@	\40

     *
\	\5c

     *

     *
     * This process is useful when the node comes from an external source that doesn't
     * conform to nodeprep. For example, a username in LDAP may be "Joe Smith". Because
     * the <space> character isn't a valid part of a node, the username should
     * be escaped to "Joe\20Smith" before being made into a JID (e.g. "joe\20smith@example.com"
     * after case-folding, etc. has been applied).

     *
     * All node escaping and un-escaping must be performed manually at the appropriate
     * time; the JID class will not escape or un-escape automatically.
     *
     * @param node the escaped version of the node.
     * @return the un-escaped version of the node.
     */
    public static String unescapeNode(String node) {
        if (node == null) {
            return null;
        }
        char [] nodeChars = node.toCharArray();
        StringBuilder buf = new StringBuilder(nodeChars.length);
        for (int i=0, n=nodeChars.length; i<n; i++) {
            compare: {
                char c = node.charAt(i);
                if (c == '\\' && i+2<n) {
                    char c2 = nodeChars[i+1];
                    char c3 = nodeChars[i+2];
                    if (c2 == '2') {
                        switch (c3) {
                            case '0': buf.append(' '); i+=2; break compare;
                            case '2': buf.append('"'); i+=2; break compare;
                            case '6': buf.append('&'); i+=2; break compare;
                            case '7': buf.append('\''); i+=2; break compare;
                            case 'f': buf.append('/'); i+=2; break compare;
                        }
                    }
                    else if (c2 == '3') {
                        switch (c3) {
                            case 'a': buf.append(':'); i+=2; break compare;
                            case 'c': buf.append('<'); i+=2; break compare;
                            case 'e': buf.append('>'); i+=2; break compare;
                        }
                    }
                    else if (c2 == '4') {
                        if (c3 == '0') {
                            buf.append("@");
                            i+=2;
                            break compare;
                        }
                    }
                    else if (c2 == '5') {
                        if (c3 == 'c') {
                            buf.append("\\");
                            i+=2;
                            break compare;
                        }
                    }
                }
                buf.append(c);
            }
        }
        return buf.toString();
    }

    /**
     * Escapes all necessary characters in the String so that it can be used
     * in an XML doc.
     *
     * @param string the string to escape.
     * @return the string with appropriate characters escaped.
     */
    public static String escapeForXML(String string) {
        if (string == null) {
            return null;
        }
        char ch;
        int i=0;
        int last=0;
        char[] input = string.toCharArray();
        int len = input.length;
        StringBuilder out = new StringBuilder((int)(len*1.3));
        for (; i < len; i++) {
            ch = input[i];
            if (ch > '>') {
            }
            else if (ch == '<') {
                if (i > last) {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append(LT_ENCODE);
            }
            else if (ch == '>') {
                if (i > last) {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append(GT_ENCODE);
            }

            else if (ch == '&') {
                if (i > last) {
                    out.append(input, last, i - last);
                }
                // Do nothing if the string is of the form ë (unicode value)
                if (!(len > i + 5
                    && input[i + 1] == '#'
                    && Character.isDigit(input[i + 2])
                    && Character.isDigit(input[i + 3])
                    && Character.isDigit(input[i + 4])
                    && input[i + 5] == ';')) {
                        last = i + 1;
                        out.append(AMP_ENCODE);
                    }
            }
            else if (ch == '"') {
                if (i > last) {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append(QUOTE_ENCODE);
            }
            else if (ch == '\'') {
                if (i > last) {
                    out.append(input, last, i - last);
                }
                last = i + 1;
                out.append(APOS_ENCODE);
            }
        }
        if (last == 0) {
            return string;
        }
        if (i > last) {
            out.append(input, last, i - last);
        }
        return out.toString();
    }

    /**
     * Used by the hash method.
     */
    private static MessageDigest digest = null;

    /**
     * Hashes a String using the SHA-1 algorithm and returns the result as a
     * String of hexadecimal numbers. This method is synchronized to avoid
     * excessive MessageDigest object creation. If calling this method becomes
     * a bottleneck in your code, you may wish to maintain a pool of
     * MessageDigest objects instead of using this method.
     *

     * A hash is a one-way function -- that is, given an
     * input, an output is easily computed. However, given the output, the
     * input is almost impossible to compute. This is useful for passwords
     * since we can store the hash and a hacker will then have a very hard time
     * determining the original password.
     *
     * @param data the String to compute the hash of.
     * @return a hashed version of the passed-in String
     */
    public synchronized static String hash(String data) {
        if (digest == null) {
            try {
                digest = MessageDigest.getInstance("SHA-1");
            }
            catch (NoSuchAlgorithmException nsae) {
                System.err.println("Failed to load the SHA-1 MessageDigest. " +
                "Jive will be unable to function normally.");
            }
        }
        // Now, compute hash.
        try {
            digest.update(data.getBytes("UTF-8"));
        }
        catch (UnsupportedEncodingException e) {
            System.err.println(e);
        }
        return encodeHex(digest.digest());
    }

    /**
     * Encodes an array of bytes as String representation of hexadecimal.
     *
     * @param bytes an array of bytes to convert to a hex string.
     * @return generated hex string.
     */
    public static String encodeHex(byte[] bytes) {
        StringBuilder hex = new StringBuilder(bytes.length * 2);

        for (byte aByte : bytes) {
            if (((int) aByte & 0xff) < 0x10) {
                hex.append("0");
            }
            hex.append(Integer.toString((int) aByte & 0xff, 16));
        }

        return hex.toString();
    }

    /**
     * Encodes a String as a base64 String.
     *
     * @param data a String to encode.
     * @return a base64 encoded String.
     */
    public static String encodeBase64(String data) {
        byte [] bytes = null;
        try {
            bytes = data.getBytes("ISO-8859-1");
        }
        catch (UnsupportedEncodingException uee) {
            uee.printStackTrace();
        }
        return encodeBase64(bytes);
    }

    /**
     * Encodes a byte array into a base64 String.
     *
     * @param data a byte array to encode.
     * @return a base64 encode String.
     */
    public static String encodeBase64(byte[] data) {
        return encodeBase64(data, false);
    }

    /**
     * Encodes a byte array into a bse64 String.
     *
     * @param data The byte arry to encode.
     * @param lineBreaks True if the encoding should contain line breaks and false if it should not.
     * @return A base64 encoded String.
     */
    public static String encodeBase64(byte[] data, boolean lineBreaks) {
        return encodeBase64(data, 0, data.length, lineBreaks);
    }

    /**
     * Encodes a byte array into a bse64 String.
     *
     * @param data The byte arry to encode.
     * @param offset the offset of the bytearray to begin encoding at.
     * @param len the length of bytes to encode.
     * @param lineBreaks True if the encoding should contain line breaks and false if it should not.
     * @return A base64 encoded String.
     */
    public static String encodeBase64(byte[] data, int offset, int len, boolean lineBreaks) {
        return Base64.encodeBytes(data, offset, len, (lineBreaks ?  Base64.NO_OPTIONS : Base64.DONT_BREAK_LINES));
    }

    /**
     * Decodes a base64 String.
     *
     * @param data a base64 encoded String to decode.
     * @return the decoded String.
     */
    public static byte[] decodeBase64(String data) {
        return Base64.decode(data);
    }

    /**
     * Pseudo-random number generator object for use with randomString().
     * The Random class is not considered to be cryptographically secure, so
     * only use these random Strings for low to medium security applications.
     */
    private static Random randGen = new Random();

    /**
     * Array of numbers and letters of mixed case. Numbers appear in the list
     * twice so that there is a more equal chance that a number will be picked.
     * We can use the array to get a random number or letter by picking a random
     * array index.
     */
    private static char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" +
                    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();

    /**
     * Returns a random String of numbers and letters (lower and upper case)
     * of the specified length. The method uses the Random class that is
     * built-in to Java which is suitable for low to medium grade security uses.
     * This means that the output is only pseudo random, i.e., each number is
     * mathematically generated so is not truly random.

     *
     * The specified length must be at least one. If not, the method will return
     * null.
     *
     * @param length the desired length of the random String to return.
     * @return a random String of numbers and letters of the specified length.
     */
    public static String randomString(int length) {
        if (length < 1) {
            return null;
        }
        // Create a char buffer to put random letters and numbers in.
        char [] randBuffer = new char[length];
        for (int i=0; i<randBuffer.length; i++) {
            randBuffer[i] = numbersAndLetters[randGen.nextInt(71)];
        }
        return new String(randBuffer);
    }

    private StringUtils() {
        // Not instantiable.
    }
}


text:
//
//  BabyClothes.h
//  BabyBluetoothAppDemo
//
//  Created by 刘彦玮 on 15/9/27.
//  Copyright © 2015年 刘彦玮. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>

@interface BabyOptions : NSObject

#pragma mark -属性
/*!
 * 扫描参数,centralManager:scanForPeripheralsWithServices:self.scanForPeripheralsWithServices options:self.scanForPeripheralsWithOptions
 * @param An optional dictionary specifying options for the scan.
 *  @see                centralManager:scanForPeripheralsWithServices
 *  @seealso            CBCentralManagerScanOptionAllowDuplicatesKey :忽略同一个Peripheral端的多个发现事件被聚合成一个发现事件
 *	@seealso			CBCentralManagerScanOptionSolicitedServiceUUIDsKey
 */
@property(nonatomic,strong) NSDictionary *scanForPeripheralsWithOptions;

/*!
*  连接设备的参数
*  @method connectPeripheral:options:
*  @param              An optional dictionary specifying connection behavior options.
*  @see                centralManager:didConnectPeripheral:
*  @see                centralManager:didFailToConnectPeripheral:error:
*  @seealso            CBConnectPeripheralOptionNotifyOnConnectionKey
*  @seealso            CBConnectPeripheralOptionNotifyOnDisconnectionKey
*  @seealso            CBConnectPeripheralOptionNotifyOnNotificationKey
*/
@property(nonatomic,strong) NSDictionary *connectPeripheralWithOptions;

/*!
 * 扫描参数,centralManager:scanForPeripheralsWithServices:self.scanForPeripheralsWithServices options:self.scanForPeripheralsWithOptions
 *@param serviceUUIDs A list of CBUUID objects representing the service(s) to scan for.
 *@see                centralManager:scanForPeripheralsWithServices
 */
@property(nonatomic,strong) NSArray *scanForPeripheralsWithServices;

// [peripheral discoverServices:self.discoverWithServices];
@property(nonatomic,strong) NSArray *discoverWithServices;

// [peripheral discoverCharacteristics:self.discoverWithCharacteristics forService:service];
@property(nonatomic,strong) NSArray *discoverWithCharacteristics;

#pragma mark -构造方法
-(instancetype)initWithscanForPeripheralsWithOptions:(NSDictionary *)scanForPeripheralsWithOptions
                        connectPeripheralWithOptions:(NSDictionary *)connectPeripheralWithOptions;

-(instancetype)initWithscanForPeripheralsWithOptions:(NSDictionary *)scanForPeripheralsWithOptions
                        connectPeripheralWithOptions:(NSDictionary *)connectPeripheralWithOptions
                      scanForPeripheralsWithServices:(NSArray *)scanForPeripheralsWithServices
                                discoverWithServices:(NSArray *)discoverWithServices
                         discoverWithCharacteristics:(NSArray *)discoverWithCharacteristics;

@end

redpajama_set_name: RedPajamaGithub


text:
import moment from 'moment';
import DateHelper from '../DateHelper';

describe('DateHelper', () => {

  var result;

  it('should detect german locale date string', () => {
    result = DateHelper.isGermanLocaleDate('1970-01-01');
    expect(result).toBe(false);

    result = DateHelper.isGermanLocaleDate('01.01.1970');
    expect(result).toBe(true);
  });

  it('should extract year from german locale date string', () => {
    result = DateHelper.getGermanLocaleYear('01.01.1970');
    expect(result).toBe(1970);
  });

  it('should detect english locale date string', () => {
    result = DateHelper.isEnglishLocalDate('01.01.1970');
    expect(result).toBe(false);

    result = DateHelper.isEnglishLocalDate('1970-01-01');
    expect(result).toBe(true);
  });

  it('should extract year from english locale date string', () => {
    result = DateHelper.getEnglishLocaleYear('1970-01-01');
    expect(result).toBe(1970);
  });

  it('should detect year', () => {
    result = DateHelper.isYear('10');
    expect(result).toBe(false);

    result = DateHelper.isYear('1970');
    expect(result).toBe(true);
  });

  it('should return year', () => {
    result = DateHelper.getYear('1970');
    expect(result).toBe(1970);
  });

  it('should detect valid year', () => {
    result = DateHelper.hasValidYear('1. Januar 1970');
    expect(result).toBe(false);

    result = DateHelper.hasValidYear('1970');
    expect(result).toBe(true);

    result = DateHelper.hasValidYear('01.01.1970');
    expect(result).toBe(true);

    result = DateHelper.hasValidYear('1970-01-01');
    expect(result).toBe(true);
  });

  it('should return default min year', () => {
    result = DateHelper.getDefaultMinYear();
    expect(result).toBe(1500);
  });

  it('should return default max year', () => {
    result = DateHelper.getDefaultMaxYear();
    expect(result).toBe(moment().year());
  });

  it('should extract year from string', () => {
    result = DateHelper.extractYear('1. Januar 1970');
    expect(result).toBe(false);

    result = DateHelper.extractYear('1970');
    expect(result).toBe(1970);

    result = DateHelper.extractYear('01.01.1970');
    expect(result).toBe(1970);

    result = DateHelper.extractYear('1970-01-01');
    expect(result).toBe(1970);
  });

});


text:
(function ($) {
  'use strict';

  $( document ).ready(function() {
    $.ajax({
      type: 'POST',
      url: 'http://localhost:9200/_cluster/health',
      jsonp : false,
      crossDomain: true,
      processData : false,
      dataType : 'jsonp',
      success: function (response) {
        $('#clusterName').html(response);
      },
      error: function (response) {
      }
    });
  });

})(jQuery);
jQuery.noConflict();


text:
<?php

// no direct access
defined('_JEXEC') or die;

class modTZ_PortfolioArchiveHelper
{
	static function getList(&$params)
	{
		//get database
		$db		= JFactory::getDbo();
		$query	= $db->getQuery(true);
		$query->select('MONTH(created) AS created_month, created, id, title, YEAR(created) AS created_year');
		$query->from('#__content');
		$query->where('state = 2 AND checked_out = 0');
		$query->group('created_year DESC, created_month DESC');

		// Filter by language
		if (JFactory::getApplication()->getLanguageFilter()) {
			$query->where('language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')');
		}

		$db->setQuery($query, 0, intval($params->get('count')));
		$rows = (array) $db->loadObjectList();

		$app	= JFactory::getApplication();
		$menu	= $app->getMenu();
		$item	= $menu->getItems('link', 'index.php?option=com_tz_portfolio&view=archive', true);

		$itemid = (isset($item) && count($item)>0) ? '&Itemid='.$item->id : '';

		$i		= 0;
		$lists	= array();
		foreach ($rows as $row) {
			$date = JFactory::getDate($row->created);

			$created_month	= $date->format('n');
			$created_year	= $date->format('Y');

			$created_year_cal	= JHTML::_('date', $row->created, 'Y');
			$month_name_cal	= JHTML::_('date', $row->created, 'F');

			$lists[$i] = new stdClass;

			$lists[$i]->link	= JRoute::_('index.php?option=com_tz_portfolio&view=archive&year='.$created_year.'&month='.$created_month.$itemid);
			$lists[$i]->text	= JText::sprintf('MOD_ARTICLES_ARCHIVE_DATE', $month_name_cal, $created_year_cal);

			$i++;
		}

		return $lists;
	}
}


text:
@interface FriendsViewController ()<UITableViewDataSource,UITableViewDelegate,NSFetchedResultsControllerDelegate>

@property (weak, nonatomic) IBOutlet UITableView *friendsTableView;
@property (nonatomic,strong) NSFetchedResultsController *friendsListFetcher;
@end

@implementation FriendsViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  [self fetchData];
  [self setupTableView];
}

- (void)viewWillAppear:(BOOL)animated {
  self.title = [[XMPPModel sharedModel] currentUsername];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)fetchData {
  [[ChatManager sharedManager]connectAndAuthenticateWithCompletionBlock:^(NSArray *result, BOOL success, NSError *error) {
    if (success) {
      [[ChatManager sharedManager]goOnline];
    }
  }];
}

- (void)setupTableView {
  if (self.friendsListFetcher == nil) {
    self.friendsListFetcher = [[ChatManager sharedManager] friendsListFetcher];
    self.friendsListFetcher.delegate = self;
    NSError *error = nil;
    if (![self.friendsListFetcher performFetch:&error]) {
      DDLogError(@"Error performing fetch: %@", error);
    }
  }
}

- (IBAction)didTapLogout:(id)sender {
  [[ChatManager sharedManager]logoutWithCompletionBlock:^(NSArray *result, BOOL success, NSError *error) {
    AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
    [appDelegate showLoginFlow];
  }];
}

#pragma mark - UITableViewDataSource Methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  NSArray *sections = [self.friendsListFetcher sections];
  if (section < [sections count]) {
    id <NSFetchedResultsSectionInfo> sectionInfo = sections[section];
    return sectionInfo.numberOfObjects;
    }

  return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friendCell"];

  XMPPUserCoreDataStorageObject *user = [self.friendsListFetcher objectAtIndexPath:indexPath];
  cell.textLabel.text = user.displayName;
  return cell;
}

#pragma mark - NSFetchResultsControllerDeleagte

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
  [self.friendsTableView reloadData];
}

 #pragma mark - Navigation

 // In a storyboard-based application, you will often want to do a little preparation before navigation
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
   ChatViewController *chatVC = (ChatViewController *)segue.destinationViewController;
   NSInteger selectedRow = [self.friendsTableView indexPathForSelectedRow].row;
   chatVC.selectedFriend = [self.friendsListFetcher.fetchedObjects objectAtIndex:selectedRow];
 }

@end


text:
package org.deviceconnect.android.deviceplugin.host.file;

import android.Manifest;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;

import org.deviceconnect.android.activity.PermissionUtility;
import org.deviceconnect.android.provider.FileManager;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * ファイル操作を行うクラス.
 */
public class FileDataManager {
    /** バッファーサイズ. */
    private static final int BUFFER_SIZE = 1024;

    /**
     * ファイル更新チェックの間隔を定義する.
     *

     * ここの時間を短くすることで監視時間が早まる。
     */
    private static final int PERIOD = 10;

    /**
     * ファイル更新タイマー.
     */
    private ScheduledExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();

    /**
     * ファイル更新タイマーキャンセル用Future.
     */
    private ScheduledFuture<?> mFuture;

    /**
     * 前回更新確認した時間.
     */
    private long mLastModifiedDate;

    /**
     * ファイルの更新通知用リスナー.
     */
    private FileModifiedListener mModifiedListener;

    /**
     * ファイルマネージャー.
     */
    private FileManager mFileManager;

    /**
     * 開いたファイルを保持するマップ.
     */
    private Map<String, FileData> mFiles = new HashMap<String, FileData>();

    /**
     * コンストラクタ.
     *
     * @param mgr ファイルマネージャー
     */
    public FileDataManager(final FileManager mgr) {
        mFileManager = mgr;
    }

    /**
     * 後始末を行う.
     */
    public void clear() {

    }

    /**
     * パスを変換する.
     *
     * @param file パス変換するファイル
     * @return ファイル名
     */
    public String getPath(final File file) {
        File mBaseDir = mFileManager.getBasePath();
        String path = file.getAbsolutePath();
        String base = mBaseDir.getAbsolutePath();
        if (path.startsWith(base)) {
            return path.substring(base.length() + 1);
        }
        return null;
    }

    /**
     * ファイルを開く.
     *
     * @param path 開くファイルのパス
     * @param flag フラグ
     * @return FileDataオブジェクト
     * @throws IOException ファイルのオープンに失敗した場合に発生
     */
    public FileData openFileData(final String path, final FileData.Flag flag) throws IOException {
        if (mFiles.containsKey(path)) {
            throw new IllegalStateException("file is already open.");
        }

        FileData file = null;
        switch (flag) {
        case R:
            file = openReadFileData(path, flag);
            break;
        case RW:
            file = openReadWriteFileData(path, flag);
            break;
        default:
            break;
        }
        if (file != null) {
            mFiles.put(path, file);
        }
        return file;
    }

    /**
     * ファイルを閉じる.
     *
     * @param path 閉じるファイルのパス
     * @return 閉じるのに成功した場合はtrue、それ以外はfalse
     */
    public boolean closeFileData(final String path) {
        FileData file = mFiles.remove(path);
        return file != null;
    }

    /**
     * 指定されたFileデータを取得する.
     *

     * 指定されたパスのファイルが存在しない場合にはnullを返却する.
     *
     * @param path パス
     * @return FileDataオブジェクト
     */
    public FileData getFileData(final String path) {
        return mFiles.get(path);
    }

    /**
     * ファイルを読み込む.
     *
     * @param file 読み込むファイル
     * @param position 読み込む位置
     * @param length 読み込む長さ
     * @return 読み込んだデータ
     */
    public void readFile(@NonNull final FileData file, final int position, final int length,
            @NonNull final ReadFileCallback callback) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Context context = mFileManager.getContext();
            PermissionUtility.requestPermissions(context, new Handler(Looper.getMainLooper()),
                    new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
                    new PermissionUtility.PermissionRequestCallback() {
                        @Override
                        public void onSuccess() {
                            readFileInternal(file, position, length, callback);
                        }

                        @Override
                        public void onFail(@NonNull String deniedPermission) {
                            callback.onFail();
                        }
                    });
        } else {
            readFileInternal(file, position, length, callback);
        }
    }

    /**
     * @see FileDataManager#readFile(FileData, int, int, ReadFileCallback)
     */
    private void readFileInternal(@NonNull FileData file, int position, int length,
            @NonNull ReadFileCallback callback) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            FileInputStream fis = null;
            try {
                byte[] buffer = new byte[BUFFER_SIZE];
                int count = 0;
                int len = 0;
                fis = new FileInputStream(file.getPath());
                fis.skip(position);
                while (((len = fis.read(buffer)) != -1)) {
                    if (count + len < length) {
                        baos.write(buffer, 0, len);
                    } else {
                        int l = length - count;
                        baos.write(buffer, 0, l);
                        break;
                    }
                    count += len;
                }
                callback.onSuccess(new String(baos.toByteArray()));
            } catch (FileNotFoundException e) {
                callback.onFail();
            } catch (IOException e) {
                callback.onFail();
            } finally {
                if (fis != null) {
                    fis.close();
                }
            }
        } catch (Throwable throwable) {
            callback.onFail();
        }
    }

    /**
     * ファイルにデータを書き込む.
     *
     * @param file 書き込み先のファイル
     * @param data 書き込むデータ
     * @param pos 書き込む位置
     * @param callback
     */
    public void writeFile(@NonNull final FileData file, @NonNull final byte[] data, final int pos,
            @NonNull final WriteFileCallback callback) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Context context = mFileManager.getContext();
            PermissionUtility.requestPermissions(context, new Handler(Looper.getMainLooper()),
                    new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
                    new PermissionUtility.PermissionRequestCallback() {
                        @Override
                        public void onSuccess() {
                            writeFileInternal(file, data, pos, callback);
                        }

                        @Override
                        public void onFail(@NonNull String deniedPermission) {
                            callback.onFail();
                        }
                    });
        } else {
            writeFileInternal(file, data, pos, callback);
        }
    }

    /**
     * ファイルにデータを書き込む.
     *
     * @param file 書き込み先のファイル
     * @param data 書き込むデータ
     * @param pos 書き込む位置
     * @param callback
     * @see FileDataManager#writeFile(FileData, byte[], int, WriteFileCallback)
     */
    private void writeFileInternal(@NonNull FileData file, @NonNull byte[] data, int pos,
            @NonNull WriteFileCallback callback) {
        try {
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(file.getPath());
                fos.write(data, pos, data.length - pos);
            } catch (FileNotFoundException e) {
                callback.onFail();
                return;
            } catch (IOException e) {
                callback.onFail();
                return;
            } finally {
                if (fos != null) {
                    fos.close();
                }
            }
            callback.onSuccess();
        } catch (Throwable throwable) {
            callback.onFail();
        }
    }

    /**
     * Readモードでファイルを開く.
     *
     * @param path パス
     * @param flag フラグ
     * @return FileDataオブジェクト
     * @throws FileNotFoundException ファイルが見つからない場合に発生する
     */
    private FileData openReadFileData(final String path, final FileData.Flag flag) throws FileNotFoundException {
        File mBaseDir = mFileManager.getBasePath();
        String tmpPath = path;
        if (!tmpPath.startsWith("/")) {
            tmpPath = "/" + path;
        }

        FileData file = new FileData();
        File f = new File(mBaseDir + tmpPath);
        file.setFile(f);
        file.setFlag(flag);
        return file;
    }

    /**
     * Read/Writeモードでファイルを開く.
     *
     * @param path パス
     * @param flag フラグ
     * @return FileDataオブジェクト
     * @throws FileNotFoundException ファイルが見つからない場合に発生する
     */
    private FileData openReadWriteFileData(final String path, final FileData.Flag flag) throws FileNotFoundException {
        File mBaseDir = mFileManager.getBasePath();
        String tmpPath = path;
        if (!tmpPath.startsWith("/")) {
            tmpPath = "/" + path;
        }

        FileData file = new FileData();
        File f = new File(mBaseDir + tmpPath);
        file.setFile(f);
        file.setFlag(flag);
        return file;
    }

    /**
     * ファイル監視タイマーを開始する.
     */
    public void startTimer() {
        if (mFuture != null) {
            return;
        }

        mFileManager.checkReadPermission(new FileManager.CheckPermissionCallback() {
            @Override
            public void onSuccess() {
                mLastModifiedDate = System.currentTimeMillis();
                mFuture = mExecutor.scheduleAtFixedRate(() -> {
                    getUpdatedFiles(new CheckUpdatedFilesCallback() {
                        @Override
                        public void onSuccess(@NonNull List<File> files) {
                            if (files.size() > 0) {
                                if (mModifiedListener != null) {
                                    mModifiedListener.onWatchFile(files);
                                }
                            }
                        }

                        @Override
                        public void onFail() {

                        }
                    });
                }, PERIOD, PERIOD, TimeUnit.SECONDS);
            }

            @Override
            public void onFail() {

            }
        });
    }

    /**
     * ファイル監視タイマーを停止する.
     */
    public void stopTimer() {
        if (mFuture != null) {
            mFuture.cancel(true);
            mFuture = null;
        }
    }

    /**
     * ファイルの更新チェックを行う.
     *
     * @param callback 更新チェックの結果が返却されるコールバック
     */
    public synchronized void getUpdatedFiles(final CheckUpdatedFilesCallback callback) {
        mFileManager.checkReadPermission(new FileManager.CheckPermissionCallback() {
            @Override
            public void onSuccess() {
                List<File> files = new ArrayList<File>();
                File mBaseDir = mFileManager.getBasePath();
                getUpdatedFiles(mBaseDir, files);
                mLastModifiedDate = System.currentTimeMillis();
                callback.onSuccess(files);
            }

            @Override
            public void onFail() {
                callback.onFail();
            }
        });
    }

    /**
     * ファイルが更新されている場合には、リストに追加する.
     *

     * ファイルがディレクトリの場合には、中のファイルも再起的に行う。
     *
     * @param file 更新確認を行うファイル
     * @param modifyFiles 更新されたファイルを追加するリスト
     */
    private void getUpdatedFiles(final File file, final List<File> modifyFiles) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File f : files) {
                getUpdatedFiles(f, modifyFiles);
            }
        }

        // ファイルの更新時間が前回チェック時よりも新しい場合
        long date = file.lastModified();
        if (mLastModifiedDate < date) {
            modifyFiles.add(file);
        }
    }

    /**
     * ファイル更新通知リスナーを設定する.
     *
     * @param listener リスナー
     */
    public void setFileModifiedListener(final FileModifiedListener listener) {
        mModifiedListener = listener;
    }

    /**
     * ファイルの更新通知用リスナー.
     */
    public interface FileModifiedListener {
        /**
         * ファイルの更新が発見された場合に通知される.
         *
         * @param files 更新されたファイル
         */
        void onWatchFile(List<File> files);
    }

    public interface ReadFileCallback {
        void onSuccess(@NonNull String data);

        void onFail();
    }

    public interface WriteFileCallback {
        void onSuccess();

        void onFail();
    }

    public interface CheckUpdatedFilesCallback {
        void onSuccess(@NonNull List<File> files);

        void onFail();
    }
}


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
Meddn Soc. Fauna Flora fenn. 5: 42 (1879)

#### Original name
Hydnum hirtum Fr.

### Remarks
null


text:
{% extends "websettings/base.html" %}
{% block content %}

            <form class="form-horizontal">
                <fieldset>
                    {% for k, v in websettings %}

                            {{ k }}

                                <input type="text" id="id_{{ k }}" value="{{ v }}" maxlength="255" disabled />

                    {% endfor %}
                </fieldset>
            </form>
            Edit

{% endblock content %}


text:
{% extends "base.html" %}

{% load i18n %}
{% load cache %}
{% load grid_tags %}
{% load package_tags %}

{% block head_title %}{{ grid.title }}{% endblock %}

{% block extra_head %}
    {{ block.super }}
    <meta name="description" content="{{ grid.description }}" />
    <meta name="keywords" content="{{ grid.packages.all|join:',' }}" />
{% endblock %}

{% block body %}
{#    {% cache 1 html_grid_detail_outer grid.pk %}#}

Compare {{ grid.title|lower }}

        {% if grid_packages|length %}

                {% include "grid/snippets/grid_row_header.html" %}

                    {% trans "Description" %}
                    {% for grid_package in grid_packages %}

                            {% with grid_package.package.description|truncatewords:20 as short %}
                                {% if grid_package.package.description|length > short|length %}
                                   {{ short|wordwrap:40|linebreaksbr|slice:"-3" }}...
                                {% else %}
                                    {{ short|wordwrap:40|linebreaksbr }}
                                {% endif %}
                            {% endwith %}

                    {% endfor %}

                    {% trans "Category" %}
                    {% for grid_package in grid_packages %}
                        {{ grid_package.package.category }}
                    {% endfor %}

                    {% trans "Project Website" %}
                    {% for grid_package in grid_packages %}
                        {{ grid_package.package.url }}
                    {% endfor %}

                {% comment %}

                    {% trans "# Using This" %}
                    {% for grid_package in grid_packages %}

                            {% with grid_package.package as package %}
                                {{ grid_package.usage_count }}
                                {% usage_button %}
                            {% endwith %}

                    {% endfor %}

                {% endcomment %}

                    {% trans "Project Status" %}
                    {% for grid_package in grid_packages %}

                            {{ grid_package.package.get_status_display }}

                    {% endfor %}

                {% comment %}

                    {% trans "Last updated" %}
                    {% for grid_package in grid_packages %}

                        {% with last_updated=grid_package.package.last_updated %}
                            {% if last_updated %}
                               {{ last_updated|date:"DATETIME_FORMAT" }}
                            {% endif %}
                        {% endwith %}

                    {% endfor %}

                {% endcomment %}

{% trans "Code repository" %}

                            Learn why being open-source is important

                    {% for grid_package in grid_packages %}

                            {% if grid_package.package.repo_url %}
                                {{ "yes"|style_element|safe }}

                                {{ grid_package.package.repo_url|safe|urlize }}
                            {% else %}
                                {{ "no"|style_element|safe }}

                                This project is not open-source :(
                            {% endif %}

                    {% endfor %}

{#
#}
{#                    #}
{#
{% trans "Contributors" %}
#}
{#
#}
{#                            {{ "Volunteers which are officially not in the team, but helped because they wanted. Very often this is possible only if project is open-source."|wordwrap:60|linebreaksbr }}#}
{#
#}
{#                    	#}
{#                    {% for grid_package in grid_packages %}#}
{#                        #}
{#                            {% for contributor in package.not_team_contributors|slice:"10" %}#}
{#
#}
{#                                    #}
{#                                    {{ contributor.name }}#}
{#
#}
{#                            {% endfor %}#}
{#                        	#}
{#                    {% endfor %}#}
{#
#}

{% trans "Development" %}

Graph which illustrate rate of development

                    {% for grid_package in grid_packages %}

                            {% if grid_package.package.repo_url %}

                            {% endif %}

                    {% endfor %}

                {% comment %}

                    {% trans "Stars" %}
                    {% for grid_package in grid_packages %}
                        {{ grid_package.package.repo_watchers|default:"n/a" }}
                    {% endfor %}

                {% endcomment %}
{#
#}
{#                    {% trans "Participants" %}	#}
{#                    {% for grid_package in grid_packages %}#}
{#                        #}
{#                            {% for collaborator in grid_package.package.participant_list %}#}
{#                                {% if forloop.counter <= 10 %}#}
{#                                    {{ collaborator }}#}
{#                                    {% if not forloop.last %}#}
{#
#}
{#                                    {% endif %}#}
{#                                {% endif %}#}
{#                                {% if forloop.counter == 11 %}#}
{#                                    {% trans "more..." %}#}
{#                                {% endif %}#}
{#                            {% endfor %}#}
{#                        	#}
{#                    {% endfor %}#}
{#
#}

                {% for feature in features %}

{{ feature.title }}

{{ feature.description|wordwrap:50|linebreaksbr }}

                        {% for grid_package in grid_packages %}
                            {% with elements|hash:feature.pk|hash:grid_package.pk as element %}

                                {{ element.text|style_element|safe|urlize|linebreaksbr }}

                            {% endwith %}
                        {% endfor %}

                {% endfor %}

    {% else %}
        {% if request.user.is_authenticated and profile.can_add_grid_package %}

 {% trans "Add a package to get a grid view" %}

        {% endif %}
    {% endif %}

{#    {% endcache %}#}
{% endblock %}


text:
"""
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
"""
__author__ = 'Danyang'
# Definition for a  binary tree node
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def sortedArrayToBST(self, num):
        """
        post-order, dfs
        :param num: list of integers
        :return: TreeNode
        """
        if not num:
            return None

        mid = (0+len(num))/2
        left_subtree = self.sortedArrayToBST(num[0:mid])
        right_subtree = self.sortedArrayToBST(num[mid+1:])

        root = TreeNode(num[mid])
        root.left = left_subtree
        root.right = right_subtree

        return root


text:
class Material
{
public:

  Material ( void );

  Material (glm::vec3 emitancia, glm::vec3 BRDF);

  virtual ~Material( void );

  virtual glm::vec3 get_BRDF() = 0;
  virtual glm::vec3 get_emitancia() = 0;

  glm::vec3 emitancia_;
  glm::vec3 BRDF_;

};

#endif;


text:
const { app } = require('electron');

const JOB_DURATION_MS = parseInt(process.env.JOB_DURATION_MS, 10);

app.on('ready', () => {
  // first you will need to listen the `message` event in the process object
  process.on('message', (data) => {
    if (!data) {
      return;
    }

    if (data.workerEvent === 'ping') {
      process.send({ workerEvent: 'pong' });
    } else if (data.workerEvent === 'task') {
      let started = Date.now();

      // simulate 500ms duration
      setTimeout(() => {
        process.send({
          workerEvent: 'taskResponse',
          taskId: data.taskId,
          response: {
            started,
            ended: Date.now()
          }
        });
      }, JOB_DURATION_MS);
    }
  });
});


text:
package org.editorconfig.language.psi;

import com.intellij.psi.NavigatablePsiElement;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public interface EditorConfigRootDeclaration extends NavigatablePsiElement {

  @NotNull
  EditorConfigRootDeclarationKey getRootDeclarationKey();

  @NotNull
  List<EditorConfigRootDeclarationValue> getRootDeclarationValueList();

  boolean isValidRootDeclaration();
}


text:
// ----- this file has been automatically generated - do not edit
import { UAProperty } from "node-opcua-address-space-base"
import { DataType } from "node-opcua-variant"
import { UAString } from "node-opcua-basic-types"
import { EnumSecurityTokenRequest } from "./enum_security_token_request"
import { EnumMessageSecurityMode } from "./enum_message_security_mode"
import { UAAuditChannelEvent, UAAuditChannelEvent_Base } from "./ua_audit_channel_event"
/**
 * |                |                                                  |
 * |----------------|--------------------------------------------------|
 * |namespace       |http://opcfoundation.org/UA/                      |
 * |nodeClass       |ObjectType                                        |
 * |typedDefinition |AuditOpenSecureChannelEventType ns=0;i=2060       |
 * |isAbstract      |true                                              |
 */
export interface UAAuditOpenSecureChannelEvent_Base extends UAAuditChannelEvent_Base {
    clientCertificate: UAProperty<Buffer, DataType.ByteString>;
    clientCertificateThumbprint: UAProperty<UAString, DataType.String>;
    requestType: UAProperty<EnumSecurityTokenRequest, DataType.Int32>;
    securityPolicyUri: UAProperty<UAString, DataType.String>;
    securityMode: UAProperty<EnumMessageSecurityMode, DataType.Int32>;
    requestedLifetime: UAProperty<number, DataType.Double>;
    certificateErrorEventId?: UAProperty<UAString, DataType.String>;
}
export interface UAAuditOpenSecureChannelEvent extends UAAuditChannelEvent, UAAuditOpenSecureChannelEvent_Base {
}


text:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.7"/>
<title>App Engine Python SDK: google.appengine.datastore.datastore_query.PropertyFilter Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>

<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="common.css" rel="stylesheet" type="text/css"/>

App Engine Python SDK
    v1.6.9 rev.445

The Python runtime is available as an experimental Preview feature.

google

appengine

datastore

datastore_query

PropertyFilter

Public Member Functions |
List of all members

google.appengine.datastore.datastore_query.PropertyFilter Class Reference

Inheritance diagram for google.appengine.datastore.datastore_query.PropertyFilter:

  <map id="google.appengine.datastore.datastore_query.PropertyFilter_map" name="google.appengine.datastore.datastore_query.PropertyFilter_map">
<area href="classgoogle_1_1appengine_1_1datastore_1_1datastore__query_1_1___single_property_filter.html" alt="google.appengine.datastore.datastore_query._SinglePropertyFilter" shape="rect" coords="0,224,388,248"/>
<area href="classgoogle_1_1appengine_1_1datastore_1_1datastore__query_1_1_filter_predicate.html" alt="google.appengine.datastore.datastore_query.FilterPredicate" shape="rect" coords="0,168,388,192"/>
<area href="classgoogle_1_1appengine_1_1datastore_1_1datastore__query_1_1___property_component.html" alt="google.appengine.datastore.datastore_query._PropertyComponent" shape="rect" coords="0,112,388,136"/>
<area href="classgoogle_1_1appengine_1_1datastore_1_1datastore__query_1_1___base_component.html" alt="google.appengine.datastore.datastore_query._BaseComponent" shape="rect" coords="0,56,388,80"/>
</map>

Public Member Functions

def 	__init__

def 	op

def 	value

def 	__repr__

def 	__getstate__

def 	__eq__

 Public Member Functions inherited from google.appengine.datastore.datastore_query.FilterPredicate

def 	__call__

 Public Member Functions inherited from google.appengine.datastore.datastore_query._BaseComponent

def 	__eq__

def 	__ne__

Detailed Description

An immutable filter predicate that constrains a single property.

Constructor & Destructor Documentation

          def google.appengine.datastore.datastore_query.PropertyFilter.__init__
          (

          self,

          op,

          value

          )

Constructor.

Args:
  op: A string representing the operator to use.
  value: A entity_pb.Property, the property and value to compare against.

Raises:
  datastore_errors.BadArgumentError if op has an unsupported value or value
  is not an entity_pb.Property.

The documentation for this class was generated from the following file:

code/googleappengine-read-only/python/google/appengine/datastore/datastore_query.py

<address class="footer">
    Maintained by tzmartin
</address>


text:
/**
 * Listens for the app launching then creates the window
 *
 * @see http://developer.chrome.com/apps/app.window.html
 */
chrome.app.runtime.onLaunched.addListener(function(intentData) {
  chrome.app.window.create('index.html', {
  	id: "mainwin",
    bounds: {
      width: 500,
      height: 640
    }
  });
});


text:
* {-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
body {font-family:"Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;margin:0;color:#333;}
input,button,select,textarea {font-family:inherit;font-size:inherit;line-height:inherit;outline:none;resize: none;}
input::-webkit-input-placeholder,/* WebKit browsers */textarea::-webkit-input-placeholder {/* WebKit browsers */    color:rgb(204,204,204);}
input:-moz-placeholder,/* Mozilla Firefox 4 to 18 */textarea:-moz-placeholder {/* Mozilla Firefox 4 to 18 */    color:rgb(204,204,204);}
input::-moz-placeholder,/* Mozilla Firefox 19+ */textarea::-moz-placeholder {/* Mozilla Firefox 19+ */    color:rgb(204,204,204);}
input:-ms-input-placeholder,textarea:-ms-input-placeholder {/* important 增加权重*/    color:rgb(204,204,204) !important;}
input::-ms-clear {display:none;}
input::-ms-reveal {display:none;}
input::-webkit-contacts-auto-fill-button {visibility: hidden; display: none !important; pointer-events: none; position: absolute; right: 0;}
/* 底部置地*/html,body,.wrap {height:100%;font-size:100%;background:#f3f6f7;min-width:1200px;}
img {max-width:100%;border-style:none;vertical-align:middle;object-fit:cover;}
img.avatar {border-radius:50%;}
ul,li {list-style:none;margin-top:0;margin-bottom:0;padding-left:0;}
.markdown-body ul {list-style:initial !important;}
.markdown-body ul li {display:list-item !important;}
th {font-weight:normal;}
a {font-size:100%;vertical-align:baseline;background:transparent;text-decoration:none;color:inherit;}
.mcolor {color:#59B6D7;}
.tcolor {color:#666666;}
.ucolor {color:#777777;}
.gcolor {color:#CCCCCC;}
.lcolor {color:#EDEDED;}
.wcolor {color:white !important;}
.round {border-radius:50%;}
.pointer {cursor:pointer;}
.font12 {font-size:12px;}
.font14 {font-size:14px;}
.font16 {font-size:16px;}
.font18 {font-size:18px;}
.font20 {font-size:20px;}
.fl {float:left !important;}
.fr {float:right !important;}
.margin0 {margin:0;}
.padding0 {padding:0;}
.mt0 {margin-top:0;}
.mt10 {margin-top:10px;}
.mt20 {margin-top:20px;}
.mt30 {margin-top:30px;}
.mt40 {margin-top:40px;}
.mr0 {margin-right:0;}
.mr10 {margin-right:10px;}
.mr20 {margin-right:20px;}
.mb0 {margin-bottom:0;}
.mb10 {margin-bottom:10px;}
.mb20 {margin-bottom:20px;}
.mb30 {margin-bottom:30px;}
.mb40 {margin-bottom:40px;}
.ml0 {margin-left:0;}
.ml10 {margin-left:10px;}
.ml20 {margin-left:20px;}
.gray {background:#f3f6f7;}
.bgwhite {background-color:white;}
.icon {font-size:1.5em;overflow:hidden;width:1em;height:1em;vertical-align:middle;fill:currentColor;margin-top:-2px;}
.txt-hide {overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.clearfix:after {display:block;visibility:hidden;clear:both;height:0;content:'.';}
.hide {display:none;}
.inline {display:inline-block;}
.relative {position:relative;}
.absolute {position:absolute;}
/*导航*/.nav {position:relative;width:100%;height:64px;background:#fff;min-width:1200px;}
.nav_left {float:left;margin-left:50px;}
.nav_logo {width:64px;height:64px;float:left;}
.nav_beta {display:inline-block;float:left;margin-left:-2px;padding-top:32px;color:#59b6d7;}
.nav_list {width:1080px;margin:auto;}
.nav_list .navs {display:flex;height:62px;margin-bottom:0;justify-content:flex-start;align-items:center;float:left;}
.nav_list .navs li {float:left;text-align:center;margin-right:15px;transition:all .3s;position:relative;}
.nav_list .navs li a {display:inline-block;margin:0 10px;padding:20px 10px;color:#343434;font-size:18px;transition:all .1s;border-bottom:2px solid transparent;}
.nav_list .navs li a:hover {color:#59b6d7 !important;border-bottom:2px solid #59b6d7;}
.nav_list .navs li a.selected {color:#59b6d7 !important;border-bottom:2px solid #59b6d7;}
.nav_list .navs li a:link,.nav_list .navs li a:visited,.nav_list .navs li a:hover {text-decoration:none;}
.nav_list .navs .child_navs {display:none;position:absolute;z-index:99;border-radius:3px;background:#fff;box-shadow:0 1px 22px #e2e0e0;min-width:120px;}
.nav_list .navs .child_navs a {display:block;font-size:14px;margin:0;padding:10px;color:#343434;transition:all .1s;border-bottom:none;}
.nav_list .navs .child_navs a:hover {color:#59b6d7 !important;border-bottom:none;}
.nav_list .nav_search {position:relative;width:235px;height:36px;border-radius:50px;margin-top:14px;background-color:#f3f6f7;float:right;}
.nav_list .nav_input {width:calc(100% - 35px);height:100%;font-size:14px;color:#333;border:none;outline:none;background:transparent;padding-left:15px;vertical-align:middle;}
.nav_list .nav_search_icon {cursor:pointer;position:absolute;top:50%;right:10px;transform:translateY(-50%);color:#59b6d7;}
.head_search {display:none;z-index:999;position:absolute;background:#fff;width:235px;font-size:14px;box-shadow:0 1px 22px #e2e0e0;margin-top:5px;}
.head_search .history {display:none;}
.head_search .history p {font-size:14px;color:#ccc;padding:20px 15px;margin:0;}
.head_search .history ul {display:block;margin:0;padding:0px 15px;overflow:hidden;}
.head_search .history ul li {width:205px;float:left;margin-bottom:20px;overflow:hidden;}
.head_search .history ul li span {cursor:pointer;width:170px;font-size:16px;color:#999;display:block;float:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.head_search .history ul li i {display:block;cursor:pointer;width:16px;height:16px;float:right;vertical-align:sub;background-image:url(./img/close_icon.png);background-repeat:no-repeat;background-size:16px;background-position:center;content:'';}
.head_search .history .clear {font-size:12px;line-height:40px;display:block;height:40px;cursor:pointer;text-align:center;color:#999;background:#f8fcff;}
.head_search .search_types {display:none;}
.head_search .search_types ul {display:block;margin:0;padding:20px 20px 0px 20px;overflow:hidden;}
.head_search .search_types ul li {color:#666;width:100%;cursor:pointer;float:left;margin-bottom:20px;overflow:hidden;line-height:18px;}
.head_search .search_types ul li .keywords {color:#59b6d7;max-width:110px;line-height:18px;display:inline-block;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nav_right {float:right;margin:17px 50px;}
.nav_right .role-icon {position:absolute;width:14px;height:14px;bottom:-3px;left:20px;}
.nav_right a.nava {font-size:14px;color:#666;margin-right:20px;}
.nav_right a.nava:hover {color:#59b6d7;}
.nav_right img {float:left;width:30px;height:30px;margin-right:9px;cursor:pointer;border-radius:50%;}
.nav_name {display:inline-block;float:left;overflow:hidden;width:84px;padding-top:4px;white-space:nowrap;text-overflow:ellipsis;color:#343434;}
.nav_menu {position:absolute;z-index:99;top:70px;right:65px;display:none;width:180px;padding-top:15px;padding-bottom:20px;border-radius:3px;background:#fff;box-shadow:0 1px 22px #e2e0e0;}
.nav_menu .hover_cover {position:absolute;top:-60px;left:0;width:100%;height:80px;}
.nav_menu .triangle {margin-left:128px;margin-top:-23px;}
.nav_menu ul li {font-size:14px;margin-top:18px;padding-left:25px;}
.nav_menu ul li a {display:block;width:100%;height:100%;color:#666;outline:none;}
.nav_menu ul li a:hover {color:#59b6d7 !important;}
.nav_menu ul li a svg {margin-top:-4px;margin-right:15px;}
/*底部*/.footer {position:relative;z-index:1;clear:both;width:100%;height:225px;margin-top:-225px;text-align:center;border-top:1px solid #e5e5e5;background:#fff;}
.footer_cont {width:1080px;margin:0 auto;}
.footer_cont ul {margin-top:50px;}
.footer_cont ul li {display:inline-block;margin-left:10px;}
.footer_cont ul li a {font-size:12px;padding-right:10px;color:#808080;border-right:1px solid #ccc;}
.footer_cont ul li a:hover {color:#59b6d7;}
.footer_cont ul li:last-child a {border-right:0;}
.footer_cont .rights {margin:20px 0 30px;color:#808080;}
.footer_cont .developer {font-size:12px;margin-top:50px;color:#ccc;}
.footer_cont .developer span {display:inline-block;margin:0 5px;color:#333;}
/*内容*/.main {float:left;clear:both;width:100%;padding-bottom:30px;background:#f3f6f7;}
.container {width:1080px;margin:36px auto 0 auto;}
/*左侧导航*/.left_menu {float:left;width:150px;padding-top:20px;}
.left_menu ul li {position:relative;margin-bottom:36px;}
.left_menu ul li a {font-size:16px;color:#333;}
.left_menu ul li a:link {text-decoration:none;}
.left_menu .icon {font-size:30px;vertical-align:-8px;margin-right:10px;}
.left_menu .selected {color:#59b6d7 !important;}
/*右侧内容*/.right_container {width:235px;float:left;}
/*左侧内容*/.left_container {width:815px;margin-right:30px;float:left;}
/*弹出提示*/.noticebox {position:fixed;z-index:555;top:62px;display:none;width:100%;text-align:center;}
.authnoticebox {top:82px;}
.noticebox .notice {font-size:14px;line-height:50px;z-index:9999;height:50px;margin:auto;text-align:center;color:#666;background:#fff;box-shadow:0 0 22px #ededed;}
.noticebox .notice img {margin-right:10px;}
/*右侧浮动*/.right_extras {position:fixed;z-index:2;right:80px;bottom:80px;}
.right_extras a {display:block;width:48px;height:48px;margin-bottom:10px;text-align:center;border-radius:50%;}
.right_extras svg {font-size:34px;display:block;margin-bottom:10px;padding-top:11px;padding-left:12px;color:#fff;}
.right_extras .app {background:#dedede;position: relative;}
.right_extras .app .qrcode-wrap {position: absolute;right: 120%;top: -20px;padding: 10px;background-color: #fff;display: none;width: 140px;height: 160px;align-items: center;justify-content: center;flex-direction: column;box-shadow: 0 0 6px rgba(0, 0, 0, 0.09);}
.right_extras .app:hover .qrcode-wrap {display: flex;}
.right_extras .app .qrcode-wrap img {width: 120px;height: 120px;}
.right_extras .app .qrcode-wrap span {display: block;height: 10px;line-height: 10px;margin-top: 10px;color: #999;font-size: 14px;}
.right_extras .gotop {background:#59b6d7;}
.right_extras .gotop svg {font-size:40px !important;padding-left:8px !important;}
/*热门用户*/.hot_users {width:100%;background:#fff;}
.hot_users .hot_users_title {text-align:center;color:#333;font-size:18px;padding:20px 0px;}
.hot_users ul {width:100%;float:left;padding:0px 20px;margin-bottom:0px;}
.hot_users ul li {float:left;width:100%;padding:20px 0px;border-top:1px solid #ededed;}
.hot_user_avatar {float:left;}
.hot_user_avatar img {width:60px;height:60px;border-radius:50%;}
.hot_user_info {width:125px;float:left;margin-left:10px;}
.hot_user_info span {display:block;}
.hot_user_info .hot_user_name {font-size:14px;color:#333;}
.hot_user_info .hot_user_intro {font-size:14px;height:44px;line-height:22px;color:#999;margin-top:10px;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;display:-webkit-box;word-break:break-all;}
/*推荐用户*/
.recusers {width:100%;border-radius:3px;background:#fff;margin-bottom:30px;}
.recusers .u-tt{padding: 15px;text-align: center;font-weight: 500;font-size: 18px;border-bottom: 1px solid #ededed;}
.recusers p.nodata {line-height:50px;width:100%;height:50px;margin:0;text-align:center;}
.recusers ul {display:inline-block;margin-bottom: 20px;}
.recusers li {float:left;width:50px;margin:0 12px 0 15px;text-align:center;}
.recusers li > a {position:relative;}
.recusers li > a > img.role-icon {position:absolute;right:0;top:10px;width:18px;height:18px;border-radius:50%;}
.recusers li img {width:50px;height:50px;border-radius:50%;margin-top:20px;}
.recusers li span {font-size:12px;overflow:hidden;width:50px;margin-top:10px;white-space:nowrap;text-overflow:ellipsis;color:#666;line-height: 1;}
.recusers li span a {color:#333;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; display:block;margin-top:10px;}
.recusers .recmore {font-size:12px;line-height:40px;display:block;height:40px;cursor:pointer;text-align:center;color:#999;background:#f8fcff;}
.recusers .recmore {color:#999;}
/*近期热点*/.hot_news {width:100%;margin-bottom:30px;padding:0 15px 0;border:1px solid #ededed;background-color:#fff;}
.hot_news .title {font-size:18px;padding:20px 0 15px;text-align:center;color:#333;border-bottom:1px solid #ededed;}
.hot_news .time_menu {display:inline-block;width:203px;margin:0;padding-top:16px;border-bottom:1px solid #ededed;background-color:#fff;}
.hot_news .time_menu li {float:left;width:33.3%;cursor:pointer;text-align:center;}
.hot_news .time_menu li a {display:inline-block;height:40px;padding:0 10px;color:#999;}
.hot_news .time_menu li a.hover {color:#333;border-bottom:2px solid #59b6d7;}
.hot_news_list li {font-size:14px;overflow:hidden;padding:15px 0;border-bottom:1px solid #ededed;}
.hot_news_list li:last-child {border-bottom:0;}
.hot_news_list li span {font-size:12px;display:inline-block;width:16px;text-align:center;color:#fff;border-radius:3px;background:#59b6d7;}
.hot_news_list li span.grey {background:#ccc;}
.hot_news_list li a {line-height:22px;display:-webkit-box;float:right;overflow:hidden;width:177px;color:#666;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.hot_news_list .no_news {font-size:14px;padding:15px 0 5px 0;text-align:center;color:#999;}
/* 热门问题 */.hot-issues,.answer-rank {width:100%;margin-bottom:30px;padding:0 15px 0;background-color:#fff;}
.hot-issues .title,.answer-rank .title {font-size:18px;padding:20px 0 15px;text-align:center;color:#333;border-bottom:1px solid #ededed;}
.hot-issues-list,.answer-rank-list {font-size:14px;overflow:hidden;}
.hot-issues-list > li,.answer-rank-list > li {display:table;margin:30px 0px;}
.hot-issues-list .rank-num,.answer-rank-list .rank-num {display:table-cell;width:30px;}
.hot-issues-list .hot-subject,.answer-rank-list .rank-avatar,.answer-rank-list .rank-info {display:table-cell;vertical-align:middle;}
.hot-issues-list .rank-num > span,.answer-rank-list .rank-num > span {font-size:12px;line-height:16px;display:block;width:16px;height:16px;text-align:center;color:#fff;border-radius:3px;}
.hot-issues-list .rank-num .blue,.answer-rank-list .rank-num .blue {background:#59b6d7;}
.hot-issues-list .rank-num .grey,.answer-rank-list .rank-num .grey {background:#ccc;}
.no-data {text-align:center;padding:15px 0;color:#777;}
/* end 热门问题 *//* 问答达人排行榜 */.answer-rank .rank-tab {font-size:14px;height:42px;line-height:42px;display:table;width:100%;}
.answer-rank .rank-tab span {display:table-cell;text-align:center;border-bottom:1px solid #EDEDED;cursor:pointer;color:#777;}
.answer-rank .rank-tab span.active {color:#333;border-bottom:2px solid #59B6D7;}
.answer-rank-list .rank-num {vertical-align:middle;}
.answer-rank-list .rank-avatar {width:75px;position:relative;}
.answer-rank-list .rank-avatar>img.role-icon{position:absolute;left:40px;bottom:4px;width:18px;height:18px;border-radius:50%;}
.answer-rank-list .rank-info > span {width:100%;display:inline-block;padding-bottom:7px;}
/* end 问答达人排行榜 *//*缺省图*/.no_data_div {display:table;margin:0 auto;}
.no_data {display:table-cell;width:100%;height:500px;text-align:center;vertical-align:middle;}
.no_data p {font-size:14px;margin:10px 0;color:#59b6d7;}
/*评论*/.dy_comit .del_comment,.dy_cen .J-reply-comment,.comment_right .del_comment,.comment_right .J-reply-comment {font-size:12px;margin-left:15px;cursor:pointer;color:#59b6d7;}
/*分享*/.detail_third_share {font-size:14px;float:right;margin-top:14px;color:#666;}
.detail_third_share svg {margin-bottom:4px;}
.detail_third_share span a {border:none !important;}
.third_share {font-size:1.8em;}
.third_share_weibo {fill:#f97d72}
.third_share_qq {fill:#5fbddf;}
.third_share_weixin {fill:#54c58c;}
.weixin_qrcode {display:none;padding:40px;}
/*图片裁剪*/.avatar-container {margin:20px;}
.avatar-upload {margin:10px 0;}
.save-btn {text-align:right;}
.save-btn > span {margin-right:20px;color:#ccc;}
.avatar-wrapper {overflow:hidden;width:100%;height:314px;margin:15px auto;background-color:#fcfcfc;box-shadow:inset 0 0 5px rgba(0,0,0,.25);}
.avatar-preview {float:left;overflow:hidden;margin-top:15px;margin-right:15px;border:1px solid #eee;border-radius:4px;background-color:#fff;}
.avatar-upload .avatar-input {display:none;}
.avatar-upload label.avatar-file {display:inline-block;padding:0 16px;margin-top:-10px;border-radius:3px;background-color:#efefef;font-size:14px;line-height:32px;text-align:center;cursor:pointer;border:1px solid #ccc;}
.avatar-upload label.avatar-file:hover {background-color:#ddd;}
.ai_face_box {position:relative;display:inline-block;}
.ai_face_box > img {width:230px;height:163px;}
.ai_upload {position:absolute;top:0;}
.ai_upload input {position:absolute;width:230px;height:163px;cursor:pointer;opacity:0;}
/* Override Cropper's styles */.upload-box .cropper-face,.upload-box .cropper-view-box {border-radius:50%;}
/*签到*/.checkin_cont {margin-bottom:30px;}
.checkin_user {position:relative;width:100%;height:100px;border-radius:3px;background:#fff;}
.checkin_user span {display:inline-block;margin:30px 0 0 20px;color:#f87d72;width:94px;text-overflow:ellipsis;overflow:hidden;}
.checkin_user .avatar {position:absolute;top:-10px;right:10px;width:100px;height:100px;border-radius:50%;}
.checkin_user .role-icon {width:28px;position:absolute;right:5px;top:72px;}
.checkin_div {font-size:20px;line-height:50px;height:50px;cursor:pointer;text-align:center;color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background:#f87d72;}
.checked_div {background:grey;}
.checkin_div span {font-size:14px;display:inline-block;margin-left:5px;}
.checkin_div svg {font-size:23px;margin-right:5px;vertical-align:text-bottom;}
.loading {font-size:14px;padding:20px 0 10px 0;text-align:center;color:#999;}
.click_loading {line-height: 40px;height: 40px;margin-top: 10px;text-align: center;}
.click_loading span {color:#59b6d7;position:relative;display:block;cursor: pointer;}
.click_loading svg {cursor:pointer;position:absolute;top:50%;transform:translateY(-50%);color:#59b6d7;}
img.load {width:50px;}
@-webkit-keyframes icon-load {from {-webkit-transform:rotate(0deg);transform:rotate(0deg);}
to {-webkit-transform:rotate(360deg);transform:rotate(360deg);}
}
@keyframes icon-load {from {-webkit-transform:rotate(0deg);transform:rotate(0deg);}
to {-webkit-transform:rotate(360deg);transform:rotate(360deg);}
}
/*  模拟 select */.zy_select {display:inline-block;position:relative;white-space:normal;cursor:pointer;text-align:center;}
.zy_select a {color:inherit;cursor:pointer;}
.zy_select >i {overflow:hidden;float:right;position:relative;display:block;margin-top:4px;margin-left:4px;width:16px;height:16px;vertical-align:middle;transform-origin:center;transition:all .2s;}
.zy_select > i::after {display:block;position:absolute;top:50%;left:50%;width:0;height:0;border:6px solid transparent;border-top-color:#000;transform:translate(-50%,-25%);content:"";}
.zy_select span {text-align:left;}
.zy_select>ul {display:none;overflow-x:hidden;position:absolute;top:100%;left:0;z-index:5;margin:0;padding:0;width:calc(100% + 2px);background:#fff;}
.zy_select>ul >li {overflow:hidden;display:block;margin-bottom:1px;padding:5px;width:100%;min-height:20px;text-overflow:ellipsis;cursor:pointer;}
.zy_select>ul >li.active,.zy_select>ul >li:hover {background-color:#dfdfdf;color:#fff;}
.zy_select.gap12>ul {left:50%;margin-top:12px;padding:15px 0 5px;min-width:115px;border-radius:2px;box-shadow:0 0 9px 0 rgba(0,0,0,.1);transform:translateX(-50%);}
.zy_select.gap12>ul li {background:none !important;padding:5px;margin-bottom:10px;}
.zy_select.gap12>ul li.active,.zy_select.gap12>ul li:hover {color:#59b6d7;}
.zy_select.border {padding:5px;border:1px solid #dfdfdf;}
.zy_select.border > ul {left:-1px;border:1px solid #dfdfdf;transform:none;}
.zy_select.open >span {color:#59b6d7;}
.zy_select.open >i {transform:rotate(180deg);}
.zy_select.open >ul {display:block;}
.select-gray span {color:#999;}
.select-gray >i:after {border-top-color:#999;}
/*收入达人排行榜*/.income-rank {width:100%;margin-bottom:30px;padding:0 15px 0;border:1px solid #ededed;background-color:#fff;}
.income-rank .title {font-size:16px;padding:20px 0 15px;text-align:center;color:#333;border-bottom:1px solid #ededed;}
.income-rank .income-list {overflow:hidden;padding:15px 0;font-size:14px;}
.income-rank .income-list li {display:flex;margin-bottom:20px;align-items:center;}
.income-rank .fans-span {display:block;margin-right:15px;width:16px;height:16px;font-size:12px;line-height:16px;text-align:center;color:#fff;border-radius:3px;background:#ccc;}
.income-rank li:nth-child(1) .fans-span,.income-rank li:nth-child(2) .fans-span,.income-rank li:nth-child(3) .fans-span {background:#59b6d7;}
.income-rank .income-avatar {overflow:hidden;border-radius:50%;width:60px;height:60px;line-height:60px;text-align:center;background-color:#f4f5f5;flex:0 0 auto;cursor:pointer;}
.income-rank .income-avatar>img {display:block;}
.income-rank .income-name {display:flex;margin-left:15px;height:60px;flex-direction:column;align-items:flex-start;justify-content:space-around;flex:1 1 auto;}
.income-rank .income-name .name {color:#333;}
.income-rank .answers-count {color:#999;}
/*积分规则*/.w_815 {width:815px;margin:auto;}
.int_top {width:100%;height:160px;margin:40px auto 30px;background:#fff;}
.intTop_left {float:left;width:4px;height:160px;border-radius:3px;background:#fbbeb9;}
.intTop_num {font-size:42px;float:left;margin:48px auto 18px 68px;color:#333;}
.int_this {font-size:14px;display:block;color:#999;}
.int_sign {font-size:18px;line-height:40px;float:right;width:153px;height:40px;margin-top:60px;margin-right:70px;cursor:pointer;text-align:center;color:#fff;border-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background:#f87d72;}
.int_cont {width:815px;padding:0 70px 50px;background:#fff;}
.int_rule {margin-top:18px;border-bottom:1px solid #ededed;}
.int_li {margin-right:40px;margin-left:30px !important;}
.int_li2 {margin:0 !important;}
.int_pm {line-height:60px !important;height:60px !important;padding-right:30px;padding-left:30px;}
.int_operation {width:290px !important;}
.int_pm span {color:#666 !important;}
.operation_ul {font-size:14px;padding-top:10px;padding-left:30px;}
.list_div {font-size:14px;}
.c_f8 {color:#f87e73 !important;}
.list_div1 {width:290px;}
.list_div2 {color:#59b6d7;}
.list_div3 {float:right;padding-right:30px;}
.operation_ul li {margin-bottom:36px;}
.operation_ul li:last-child {margin-bottom:10px;}
.int_page {margin:30px auto 0;text-align:center;}
.div_right {float:right;margin-right:30px;}
.int_b {margin-bottom:50px;}
.sign_img {width:16px;margin-right:10px;vertical-align:-2px;}
.dy_center .top-menu-left {position:relative;height:60px;}
/* btn style reference bootstrap */
.btn {display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.4;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;}
.btn-lg {padding:8px 22px;font-size:16px;line-height:1.3;border-radius:3px;}
.btn-sm {padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px;}
.btn-default {color:#fff;background-color:#d4d4d4;border-color:#d4d4d4;}
.btn-primary {color:#fff;background-color:#59b6d7;border-color:#59b6d7;}
.btn-warning {color:#fff;background-color:#F76C6A;border-color:#F76C6A;}
/*分享列表评论*/
.comment_line {margin-top:18px;border-top:1px solid #efefef;margin-bottom:20px;height:1px;position:relative;}
.comment_line>.tr2 {width:10px;height:10px;position:absolute;top:-15px;left:98px;}
.comment_line>.tr2:before,.comment_line>.tr2:after {content:'';display:block;position:absolute;border:8px solid transparent;left:0;}
.comment_line>.tr2:before {border-bottom:7px solid #efefef;top:-1px;}
.comment_line>.tr2:after {border-bottom:7px solid #fff;}
.comment_body {font-size:12px;color:#999;}
.comment_textarea {margin:10px 0 10px;}
/* .comment_textarea .input-wrap textarea {width:100%;height:78px;padding:12px;border:1px solid #ededed;background:#f3f6f7;color:#333;outline:none;resize:none;overflow:hidden;} */
.comment_post {line-height:31px;height:37px;position:relative;}
.comment_post .dy_cs {position:absolute;right:5px;top:-40px;}
.comment_post .post_button {line-height:32px;float:right;width:85px;height:32px;text-align:center;color:#fff;border:0;cursor:pointer;border-radius:3px;background:#59b6d7;}
.comment_post_nums {font-size:12px;margin-left:385px;}
.comment_box {margin-bottom: 80px;}
.comment_box .comment_con {word-break:break-all;margin-bottom:16px;}
.comment_box .comment_con a {color: #59b6d7;}
.comment_box .comment_con a.mouse {cursor:pointer;display:none;margin-left:5px;}
/*详情评论*/.comment_title {margin-top:40px;margin-bottom:20px;}
.comment_count {font-size:22px;color:#59b6d7;}
.comment_box .input-wrap {position: relative;}
.comment_box .input-wrap .comment_editor {font-size:14px;width:100%;min-height:77px;margin-bottom:10px;padding:10px;resize:none;color:#666;border:1px solid #ededed;outline:none;background:#f3f6f7;z-index: 102;}
.comment_box .input-wrap .mirror {position: absolute;top: 0;display: none;}
.comment_box .input-wrap .ev-mention-list {position: absolute;background-color: #fff;z-index: 105;display: none;padding: 8px;border: 1px solid #ccc;border-radius: 2px;box-shadow: 0 2px 8px 1px rgba(0, 0, 9, .2);}
.comment_box .input-wrap .ev-mention-list .list-content,
.comment_box .input-wrap .ev-mention-list .list-title {font-size: 12px;cursor: pointer;list-style: none;}
.comment_box .input-wrap .ev-mention-list .list-content.active {color: #59b6d7; background-color: #fff;}

.comment_box .comment_tool {text-align:right;}
.comment_box .mention-btn {position: relative;display: inline-block;cursor: pointer;}
.dialog-mention-select {position: absolute;display: flex;left: 0;top: 100%;width: 400px;height: 300px;z-index: 10;padding: 20px 40px;background-color: #fff;box-shadow: 0px 2px 9px 0px rgba(22, 23, 23, 0.09);flex-direction: column;cursor: default;}
.repostable-mention .dialog-mention-select {top: auto;bottom: 60px;}
.dialog-mention-select .search-wrap {border-bottom: 1px solid #ccc;}
.dialog-mention-select .search-wrap input {border: none;line-height: 37px;}
.dialog-mention-select .hot {color: #ccc;margin-top: 20px;cursor: default;}
.dialog-mention-select .follow-users {display: flex;flex-flow: row wrap;}
.dialog-mention-select .follow-users > li {display: inline-block;width: 50%;cursor: pointer;}
.dialog-topic-select {position: absolute;display: flex;left: 0;top: 100%;width: 400px;height: 300px;z-index: 10;padding: 20px 40px;background-color: #fff;box-shadow: 0px 2px 9px 0px rgba(22, 23, 23, 0.09);flex-direction: column;cursor: default;}
.repostable-topic .dialog-topic-select {top: auto;bottom: 60px;}
.dialog-topic-select .search-wrap,
.dialog-mention-select .search-wrap {border-bottom: 1px solid #ccc;}
.dialog-topic-select .search-wrap input,
.dialog-mention-select .search-wrap input {border: none;}
.dialog-topic-select .hot,
.dialog-mention-select .hot {color: #ccc !important;margin-top: 20px;cursor: default !important;}
.dialog-topic-select .topic-list,
.dialog-mention-select .follow-users {display: flex;flex-flow: row wrap;}
.dialog-topic-select .topic-list > li,
.dialog-mention-select .follow-users > li {display: inline-block;width: 50%;cursor: pointer;line-height: 37px;}

/* 小标签 */
.selected-topics {display: flex;flex-flow: row wrap;margin-top: 10px;}
.selected-topics .selected-topic-item {background-color: rgba(89, 182, 215, 0.15);padding: 0 6px;border-radius: 3px;color: #59b6d7;font-size: 12px;margin-right: 6px;margin-bottom: 6px;height: 24px;line-height: 24px;}
.selected-topics .selected-topic-item .close {height: 24px;line-height: 24px;cursor: pointer;}
.selected-topics .selected-topic-item svg {transform: scale(0.7);}

.comment_buttons {float: left;}
.comment_tool {float:right;}
.comment_tool .text_stats {margin-right:20px;font-size:14px;color:#777;}
.comment_list .comment_item {border-bottom:1px solid #ededed;margin-top:40px;padding-bottom:10px;}
.comment_list .comment_item dt {float:left;position:relative;}
.comment_list .comment_item dt img {border-radius:50%;}
.comment_list .comment_item dt img.role-icon {position:absolute;right:0;bottom:0;width:20px;height:20px;}
.comment_list .comment_item dd {font-size:14px;margin-left:20px;float:left;color:#333;}
.comment_list .comment_item .reply_tool {margin:8px 0;width:645px;position:relative;}
.comment_list .comment_item .reply_time {font-size:12px;color:#ccc;}
.reply_tool .reply_action {float:right;cursor:pointer;}
.reply_body {word-break:break-all;width:645px;}
.reply_body a {color:#59b6d7;}
.reply_body a.mouse {display:none;}
.a_link:hover {text-decoration:none;color:#fff !important;}
/*更多操作*/.options {float:right;width:30px;cursor:pointer;text-align:right;color:#999;}
.options_div {position:absolute;z-index:99;top:30px;right:-50px;display:none;width:125px;border-radius:3px;background:#fff;box-shadow:0 1px 22px #e2e0e0;}
.options_div .triangle {margin-top:-8px;margin-left:55px;}
.options_div ul {padding:20px 0;}
.options_div ul li {padding-left:20px;margin-bottom: 15px;}
.options_div ul li:last-child{margin-bottom: 0;}
.options_div ul li a {font-size:14px;color:#666;}
.options_div ul li a:hover {color:#59b6d7;}
.options_div .icon {margin-right:5px;vertical-align:text-top;margin-top:-2px;}
.options_div .act {color:#59b6d7;}
.triangle {margin-top:-8px;margin-left:55px;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid #fff;}
/*layer样式*/.confirm_body {padding:40px 55px 40px;text-align:center;color:#999;}
.confirm_title {font-size:20px;font-weight:500;}
.confirm_money {font-size:22px;color:#F4504D;line-height:30px;padding:20px 0px 10px 0px;text-align:center;}
.confirm_text {width:240px;text-align:center;}
.layui-layer-btn- {font-size:14px;padding:0px 0px 30px 0px !important;}
.layui-layer-btn- .layui-layer-btn-notice {background-color:#59b6d7;}
/*  申请置顶 */.apply-pinneds .day,.apply-pinneds .amount {padding:5px 10px;border-radius:2px;border:1px solid #ccc;width:100%;}
/*消息select*/.zy_select.message_select {}
.zy_select.message_select>i {margin-top:16px;}
.zy_select.message_select>ul {margin-top:5px;padding:10px 3px;}
.zy_select.message_select>ul>li {margin:0;}
/*  列表头像 */.avatar_box {position:relative;display:inline-block;}
.avatar_box .avatar {width:50px;height:50px;border-radius:50%;}
.avatar_box .role-icon {position:absolute;right:0;bottom:-5px;width:20px;height:20px;border-radius:50%;}
/*置顶弹窗*/.pinned_box .pinned_text {font-size:12px;margin-bottom:10px;color:#ccc;}
.pinned_box .pinned_spans {margin-bottom:10px;}
.pinned_box .pinned_spans span {cursor:pointer;display:inline-block;width:80px;box-sizing:border-box;border:1px solid #ccc;color:#333;height:28px;line-height:28px;margin-right:10px;text-align:center;border-radius:5px;}
.pinned_box .pinned_spans span.current {color:#59b6d7;border:1px solid #59b6d7;}
.pinned_box .pinned_input {margin-bottom:20px;}
.pinned_box .pinned_input input {outline:none;text-indent:10px;background-color:transparent;height:28px;line-height:28px;color:#333;border:1px solid #ccc;border-radius:5px;vertical-align:bottom;width:260px;}
.pinned_box .pinned_total {font-size:20px;color:#59b6d7;}
/*打赏*/
.reward_cont {margin-top:40px;text-align:center;}
.reward_cont .reward_user {width:75%;margin:0 auto;overflow:hidden;}
.reward_cont .user_item {position:relative;display:inline-block;margin-right:5px;}
.reward_cont .user_item .verified_icon {width:19px;position:absolute;bottom:0px;right:-1px;}
.reward_cont .more_user {position:relative;display:inline-block;cursor:pointer;width:1px;height:12px;}
.reward_cont .more_user:after,.reward_cont .more_user:before {border:10px solid transparent;border-left:10px solid #fff;width:0;height:0;position:absolute;top:0;right:-18px;content:' '}
.reward_cont .more_user:before {border-left-color:#777;right:-19px;}
.reward_box .reward_text {font-size:12px;margin-bottom:10px;color:#ccc;}
.reward_box .reward_spans {margin-bottom:10px;}
.reward_box .reward_spans span {cursor:pointer;display:inline-block;width:80px;box-sizing:border-box;border:1px solid #ccc;color:#333;height:28px;line-height:28px;margin-right:10px;text-align:center;border-radius:5px;}
.reward_box .reward_spans span.current {color:#59b6d7;border:1px solid #59b6d7;}
.reward_box .reward_input {margin-bottom:20px;}
.reward_box .reward_input input {outline:none;text-indent:10px;background-color:transparent;height:28px;line-height:28px;color:#333;border:1px solid #ccc;border-radius:5px;vertical-align:bottom;width:260px;}
.reward_box .reward_total {font-size:20px;color:#59b6d7;}
.reward_box .reward_amount {color: #59b6d7;font-weight: bold;margin-bottom: 10px;margin-top: 10px;font-size: 16px;}
.reward_box .reward_input_wrap {height: 36px;}
.reward_box .reward_input_wrap input[type="password"] {border: 1px solid #ccc;height: 100%;border-radius: 4px 0 0 4px;padding-left: 6px;width: calc(100% - 4em);}
.reward_box .reward_input_wrap button {background-color: #59b6d7;color: #fff;width: 4em;height: 100%;border-radius: 0 4px 4px 0;border: 1px solid #59b6d7;}
/* .reward_box .reward_input_wrap input[type="password"]:valid + button {background-color: #59b6d7;} */
.reward_box .reward_forgot {color: #59b6d7;text-align: right;font-size: 12px;margin-top: 10px;}
.reward_popups {padding:20px 40px;width:340px;overflow:hidden;min-height:500px;}
.reward_popups_con {height:100%;overflow-y:auto;overflow-x:hidden;}
.reward_popups .reward_title {font-size:18px;margin-top:10px;margin-bottom:10px;}
.reward_popups .reward_list {line-height:60px;font-size: 14px;}
.reward_popups .reward_list .uname {color:#444;margin:0 10px;}
.reward_list .u-avatar {position:relative;display:inline-block;}
.reward_list .role-icon {width:19px;position:absolute;bottom:5px;right:0;}
.reward_popups .reward_sum .opt {cursor:pointer;display:inline-block;padding:5px 15px;margin-right:20px;border:1px solid #CCC;border-radius:2px;background-color:white;}
.reward_popups .reward_sum .active {color:#59b6d7;border-color:#59b6d7;}
.reward_popups .reward_sum .opt:last-child {margin-right:0;}
.reward_popups .custom_sum {padding:5px 10px;border-radius:2px;border:1px solid #ccc;width:100%;}
.reward_popups .reward_btn_box {margin-top:40px;}
/*成功页面*/.success {width:700px;padding:40px;background-color:#fff;margin:auto;text-align:center;height:520px;position:relative;}
.success>img {width:200px;margin-top:60px;}
.success .content {position:absolute;left:0;bottom:70px;width:100%;}
.success .success-message {width:100%;height:40px;font-size:20px;color:#474747;}
.success .success-content {color:#9F9F9F;}
.success .success-button {width:70px;height:35px;line-height:35px;background-color:#EDEDED;display:block;margin:30px auto;border-radius:3px;border:1px solid #d9d9d9;}
.fuzzy {box-shadow:0 0 10px 4px white;text-shadow:0 0 10px #222;opacity:0.8;color:rgba(220,220,220,0.8) !important;word-break:break-all;cursor:pointer;}
.ads_item .body {width:85%;line-height:60px;}
.ads_item .tag {color:#777;padding:3px 6px;font-size:12px;border-radius:2px;border:1px solid #ededed;}
/* 评论置顶标识 */.green {color:#4CB994;}
.comment-top-span {float:right;color:#4CB994;}
.mt-3 {margin-top:-3px;}
.ly-error {color:red;margin-left:20px;font-size:12px;position:absolute;top:40px;right:30px;}
/* 右侧消息 */#ms_fixed_wrap {z-index:3;width:54px;right:0;top:0;bottom:0;overflow:hidden;box-shadow:0 1px 3px 0 rgba(0,0,10,0.1);}
#ms_fixed {background-color:#fff;width:74px;height:100%;z-index:99999;overflow-y:auto;overflow-x:hidden;margin:0;list-style:none;}
#ms_fixed dd {margin:0px;width:64px;position:relative;}
#ms_fixed dd.tips_current {background-color:#f3f6f7;}
#ms_fixed dd svg {width:36px;height:36px;border-radius:50%;margin:9px 9px;}
#ms_fixed dd img {width:36px;height:36px;border-radius:50%;margin:9px 9px;}
#ms_fixed .unread_div {position:absolute;top:10px;right:10px;border:1px solid #fff;border-radius:50%;}
#ms_fixed .unread_div span {display:block;font-size:12px;text-align:center;color:#fff;border-radius:50%;background:#f24343;width:16px;height:16px;}
#ms_chat_tips {z-index:3;font-size:14px;display:none;position:absolute;right:68px;top:-1px;height:36px;line-height:36px;padding:0 15px;text-align:center;background-color:#fff;color:#59b6d7;box-shadow:0 1px 22px #e2e0e0;border-radius:4px;}
#ms_chat_tips .tips_triangle {position:absolute;top:13px;right:-6px;width:0;height:0;border-left:6px solid #fff;border-bottom:6px solid transparent;border-top:6px solid transparent;}
/*图片展开显示*/.PicShow {height:auto;float:left;border:1px solid #d9d9d9;background-color:#f2f2f2;border-radius:3px;padding:10px 20px 10px;margin:5px 0 15px;clear:both;}
.PicShow ul {list-style-type:none;margin:0px;padding:0px;}
.PicShow li {float:left;display:inline;width:80px;height:80px;margin:5px 0 0 5px;overflow:hidden;position:relative;list-style-type:none;}
.PicShowExpand {color:#ccc;background-color:#efefef;padding:0px 40px 20px;margin:0px -40px;clear:both;overflow:hidden;}
.PicShowExpand #expandCenterImg {clear:both;text-align:center;vertical-align:middle;width:100%;}
.PicShowExpand #expandCenterImg img {vertical-align:middle;margin:0;}
.PicShowExpand .ico_retract {background-position:-175px 0px;vertical-align:-2px;}
.PicShowExpand .expand_top {color:#999;font-family:Arial,Helvetica,sans-serif;font-size:12px;width:auto;margin:0;line-height:40px;}
.PicShowExpand .expand_top a {text-decoration:none;}
.PicShowExpand .expand_top a:hover {color:#59b6d7;}
.PicShowExpand .expand_top .W_vline {margin:0 10px;color:#ccc;}
.PicShowExpand .expand_top svg {margin-right:5px;margin-top:-2px;}
.PicShowExpand .ico_retract {background-position:-175px 0px;vertical-align:-2px;}
.PicShowExpand .ico_showbig {background-position:-175px -24px;vertical-align:-2px;}
.PicShowExpand .ico_turnleft {background-position:-175px -50px;vertical-align:-2px;}
.PicShowExpand .ico_turnright {background-position:-175px -75px;vertical-align:-2px;}
.PicShowExpand .ico_collect {background-position:-200px -500px;vertical-align:-2px;}
.PicShowExpand .pic_choose_box {width:440px;height:56px;margin-top:15px;}
.PicShowExpand ul {list-style-type:none;margin:0px;padding:0px;width:8000px;}
.PicShowExpand .arrow_left_small {float:left;display:inline-block;cursor:default;width:12px;height:50px;text-decoration:none;line-height:50px;text-align:center;font-weight:600;border-bottom-left-radius:4px;border-top-left-radius:4px;background-color:#b9dce6;padding-top:2px;margin-top:3px;}
.PicShowExpand .arrow_left_small .ico_pic_prev {color:#333333;cursor:default;display:inline;font-family:SimSun;font-size:12px;font-style:normal;font-variant:normal;font-weight:600;height:auto;line-height:50px;margin-top:20px;overflow-x:hidden;overflow-y:hidden;text-align:center;text-decoration:none;width:auto;}
.PicShowExpand ul a {display:inline-block;opacity:0.6;padding:2px;}
.PicShowExpand ul li {float:left;_display:inline;width:58px;height:58px;margin:0 4px 0 0;}
.PicShowExpand ul a {width:100%;height:100%;overflow:hidden;}
.PicShowExpand ul a.current {padding:0;border:2px solid #f9b50f;text-decoration:none;opacity:1.0;}
.PicShowExpand ul a:hover {padding:0;border:2px solid #ffa306;text-decoration:none;opacity:1.0;}
.PicShowExpand ul img {max-width:none;border:0}
.PicShowExpand .arrow_right_small {color:#333333;background-color:#14a0cd;border-bottom-left-radius:0px;border-bottom-right-radius:4px;border-top-left-radius:0px;border-top-right-radius:4px;cursor:pointer;display:block;float:left;font-family:Arial,Helvetica,sans-serif;font-size:12px;font-style:normal;font-variant:normal;font-weight:600;height:50px;line-height:50px;margin-top:3px;text-align:center;text-decoration:none;width:12px;padding-top:2px;}
.PicShowExpand .arrow_right_small .ico_pic_next {cursor:default;display:inline;font-family:SimSun;font-size:12px;font-style:normal;font-variant:normal;font-weight:600;height:auto;line-height:50px;margin-top:20px;overflow-x:hidden;overflow-y:hidden;text-align:center;width:auto;}
.PicShowExpand .stage_box {float:left;font-family:Arial,Helvetica,sans-serif;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;line-height:13px;overflow-x:hidden;overflow-y:hidden;}
.PicShowExpand .big1 {cursor:pointer;background-color:#14a0cd;}
.PicShowExpand .big2 {cursor:default;background-color:#b9dce6;}
.PicShowExpand .text1 {cursor:pointer;}
.PicShowExpand .text2 {cursor:default;}
.PicShow .bigcursor {cursor:url("../images/big.cur"),pointer;}
.PicShowExpand .smallcursor {cursor:url("../images/small.cur"),pointer;}
.PicShowExpand .leftcursor {cursor:url("../images/pic_prev.cur"),pointer;}
.PicShowExpand .rightcursor {cursor:url("../images/pic_next.cur"),pointer;}
/*Markdownli样式*/
.markdown-body ol li{list-style:decimal;}
.markdown-body ul li{list-style:disc;}
/*举报弹窗*/
.report-ct{font-size: 14px;width: 100%;height: 150px;padding: 10px;resize: none;color: #666;border: 1px solid #ededed;outline: none;background: #f3f6f7;}
/* 转发弹框 */
.repostable-wrap {padding: 20px;}
.repostable-wrap blockquote {margin: 0;background-color: #f7f7f7;padding: 10px;font-size: 14px;line-height: 24px;color: #b3b3b3;}
.repostable-wrap blockquote h3,
.repostable-wrap blockquote p strong {color: #333;margin: 0;font-weight: normal;font-size: 100%;}
.repostable-wrap blockquote p {margin: 0;}
.repostable-wrap .content {margin-top: 20px;border: 1px solid #ededed;background-color: #f3f6f7;padding: 10px;font-size: 14px;height: 100px;overflow: auto;}
.repostable-wrap .content[contenteditable=true]:empty::before {content: attr(placeholder);display: block;color: #b3b3b3;}/* placeholder */
.repostable-wrap .tools {color: #666;margin-top: 20px;overflow: hidden;}
.repostable-wrap .tools > span {margin-right: 20px;font-size: 14px;float: left;display: block;height: 36px;line-height: 36px;}
.repostable-wrap .tools > button {float: right;background-color: #59b6d7;color: #fff;border: none;border-radius: 2px;width: 85px;height: 36px;cursor: pointer;}
.repostable-wrap .icon {fill: #999;}
.repostable-topic {cursor: pointer;}
.repostable-mention {cursor: pointer;}
.feed_repostable {display: block;padding: 20px;margin-bottom: 20px;background-color: #f7f7f7;font-size: 14px;color: #666;letter-spacing: 1px;cursor: pointer;word-wrap: break-word;word-break: break-all;}
.feed_repostable .post_cover {margin-top: 10px;}
.feed_repostable strong {font-weight: bold;}
.feed_repostable .title {font-weight: bold;margin: 0;}
.feed_repostable .description {margin: 0;}
.feed_repostable.news {display: flex;}
.feed_repostable .news-left {width: 160px;height: 114px;flex: none;margin-right: 15px;}
.feed_repostable .news-left .cover {width: 100%;height: 100%;background: no-repeat center / cover;}
.feed_repostable .news-right {flex: auto;display: flex;flex-direction: column;justify-content: space-between;letter-spacing: 0;}
.feed_repostable .news-right .title {font-size: 16px;}
.feed_repostable .news-right .category {border: 1px solid #59b6d7;border-radius: 3px;color: #59b6d7;font-size: 12px;padding: 1px 2px;margin-right: 10px;}
.feed_repostable .news-right .information {color: #999;font-size: 12px;}
.feed_repostable.group {padding: 10px 20px;}
.feed_repostable .group-wrap {background-color: #fff;display: flex;width: 100%;padding: 10px 20px;}
.feed_repostable .group-left {width: 100px;height: 100px;flex: none;margin-right: 15px;position: relative;}
.feed_repostable .group-left img {width: 100%;height: 100%;}
.feed_repostable .group-left .label {position: absolute;top: 10px;left: -10px;background-color: #64bad9;color: #fff;border-radius: 0 100px 100px 0;padding: 0 20px 0 15px;}
.feed_repostable .group-left .label::after {content: "";display: block;width: 0;height: 0;border-top: 10px solid #4a9cba;border-left: 10px solid transparent;position: absolute;top: 20px;left: 0;}
.feed_repostable .group-right {flex: auto;display: flex;flex-direction: column;justify-content: space-around;letter-spacing: 0;}
.feed_repostable .group-right .title {font-size: 18px;}
.feed_repostable .group-right .description {font-size: 14px;color: #999;}
.feed_repostable .view-more {font-size: 12px;color: #59b6d7;letter-spacing: 0;margin-left: 10px;}
.feed_repostable .view-more svg {fill: #59b6d7;}
.layui-layer-page .layui-layer-content {overflow: visible !important;} /*转发弹框话题选择溢出部分可见*/
/* 遮罩 */
.overlayer {position: absolute;top:0;left:0;right:0;bottom: 0;z-index: 100;}

.qq_consult {position: fixed;left: 27px;bottom: 30%;width: 200px;height: 165px;background-color: #70c8ec;z-index: 2;border-radius: 12px;display: flex;flex-direction: column;align-items: center;justify-content: center;}
.qq_consult::after {content: '';display: block;position: absolute;border: 20px solid transparent;border-top-color: #70c8ec;width: 0;height: 0;top: 100%;left: 40px;}
.qq_consult::before {content: '';display: block;position: absolute;top: -123px;left: 50%;margin-left: -44px;width: 89px;height: 123px;background: url(../images/pic_service.png) center/contain no-repeat;}
.qq_consult > a {display: flex;align-items: center;justify-content: center;width: 146px;height: 44px;background-color: #fff;border-radius: 6px;color: #4c7aa8;}
.qq_consult > a + a {margin-top: 20px;}


text:
<?xml version="1.0"?>
<package>
  <name>idmind_teleoperation</name>
  <version>1.0.0</version>
  <description>The idmind_teleoperation package.</description>
  <maintainer email="mcorberan@idmind.pt">Miguel Corberán Ruiz</maintainer>
  <license>MIT License</license>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>geometry_msgs</build_depend>
  <build_depend>idmind_motors</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>sensor_msgs</build_depend>
  <build_depend>std_msgs</build_depend>

  <run_depend>geometry_msgs</run_depend>
  <run_depend>idmind_motors</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>sensor_msgs</run_depend>
  <run_depend>std_msgs</run_depend>

</package>